package cn.vehicle.service;

import cn.vehicle.domains.bo.QueryCameraBo;
import cn.vehicle.domains.entity.CameraEntity;

import java.util.List;

/**
 * 相机服务接口
 * <p>
 * 定义相机相关的核心业务操作，包括新增、修改、删除、查询与解绑等功能。
 * 该接口作为业务逻辑层（Biz 层）与数据库层（Mapper 层）之间的抽象层，提供统一的数据访问规范。
 * </p>
 *
 * <p>主要职责：</p>
 * <ul>
 *   <li>定义相机表的基础增删改查方法；</li>
 *   <li>支持通过关联ID查询相机；</li>
 *   <li>提供相机解绑逻辑。</li>
 * </ul>
 */
public interface CameraService {
    /**
     * 新增相机记录
     *
     * @param cameraEntity 相机实体对象，包含相机的基本信息
     */
    void addCamera(CameraEntity cameraEntity);

    /**
     * 更新相机信息
     *
     * @param updateEntity 更新的相机实体对象，需包含主键ID
     */
    void updateCamera(CameraEntity updateEntity);

    /**
     * 根据ID查询相机详情
     *
     * @param id 相机主键ID
     * @return 相机实体对象
     */
    CameraEntity getCameraById(Long id);

    /**
     * 根据绑定关系ID查询相机列表
     *
     * @param id 关联相机ID
     * @return 相机实体列表
     */
    List<CameraEntity> queryByAssociationCameraId(Long id);

    /**
     * 删除相机记录
     *
     * @param id 相机主键ID
     */
    void deleteCamera(Long id);

    /**
     * 查询相机列表
     *
     * @param queryCameraBo 查询条件封装对象
     * @return 相机实体列表
     */
    List<CameraEntity> selectCameraList(QueryCameraBo queryCameraBo);

    /**
     * 解绑相机（清除相机的关联关系）
     *
     * @param id 相机主键ID
     */
    void unBindCamera(Long id);

    /**
     * 根据ip查询相机
     */
    CameraEntity getCameraByIp(String ip);

    /**
     * 通过cameraCode获取相机信息
     */
    CameraEntity getCameraByCameraCode(String cameraCode);
}
